1493C - K-beautiful Strings - CodeForces Solution


binary search brute force constructive algorithms greedy strings *2000

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;


int main()
{

	int t;
	int n,k;
	string str;
	cin>>t;
	while(t--){

		cin>>n>>k>>str;

		vector<int>cnt(26,0);
		for(auto ch:str){
			cnt[ch-'a']++;
		}

		int sum=0;
		bool flag=true;
		for(int i=0;i<26;i++){
			if(cnt[i]%k!=0){
				flag=false;	
			}
		}

		if(n%k!=0){
			cout<<-1<<endl;
			continue;
		}
		if(flag){
			cout<<str<<endl;
			continue;
		}


		for(int i=n-1;i>=0 && !flag;i--){
			cnt[str[i]-'a']--;
			for(int j=str[i]-'a'+1;j<26;j++){
				cnt[j]++;
				int need = 0;
				for(int ch=0;ch<26;ch++){
					need+=(k-cnt[ch]%k)%k;
				}
				if(need<=n-i-1){
					int pos=n-1;
					for(char ch='z';ch>='a';ch--){
						while(cnt[ch-'a']%k){
							str[pos--]=ch;
							cnt[ch-'a']++;
						}
					}
					while(pos>i){
						str[pos--]='a';
					}
					str[i]='a'+j;
					flag=true;
					break;
				}
				cnt[j]--;
			}
		}
		cout<<str<<endl;
	} 
	
}


Comments

Submit
0 Comments
More Questions

1574A - Regular Bracket Sequences
1574B - Combinatorics Homework
1567A - Domino Disaster
1593A - Elections
1607A - Linear Keyboard
EQUALCOIN Equal Coins
XOREQN Xor Equation
MAKEPAL Weird Palindrome Making
HILLSEQ Hill Sequence
MAXBRIDGE Maximise the bridges
WLDRPL Wildcard Replacement
1221. Split a String in Balanced Strings
1002. Find Common Characters
1602A - Two Subsequences
1555A - PizzaForces
1607B - Odd Grasshopper
1084A - The Fair Nut and Elevator
1440B - Sum of Medians
1032A - Kitchen Utensils
1501B - Napoleon Cake
1584B - Coloring Rectangles
1562B - Scenes From a Memory
1521A - Nastia and Nearly Good Numbers
208. Implement Trie
1605B - Reverse Sort
1607C - Minimum Extraction
1604B - XOR Specia-LIS-t
1606B - Update Files
1598B - Groups
1602B - Divine Array